package entities;

import java.io.Serializable;
import java.util.List;
import java.util.Vector;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import entities.VO.CondicionCompraVO;
import entities.VO.ProveedorVO;


@Entity
@Table(name="Proveedores")
public class Proveedor implements Serializable{
	
	@Transient  
	private static final long serialVersionUID = 1L;
	
	private Integer idProveedor;
	private String razonSocial; 
	private List<OrdenCompra> ordenesCompra;
	private List<CondicionCompra> condicionesCompra;
	
	public Proveedor (){
		
	}
	public Proveedor(int idProveedor) {
		super();
		this.idProveedor = idProveedor;
		
	}
	
	@Id 
    @GeneratedValue( strategy = GenerationType.AUTO)
	public Integer getIdProveedor() {
		return idProveedor;
	}
	public void setIdProveedor(Integer idProveedor) {
		this.idProveedor = idProveedor;
	}

	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}
	public String getRazonSocial() {
		return razonSocial;
	}
	
	
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Proveedor other = (Proveedor) obj;
		if (idProveedor != other.idProveedor)
			return false;
		return true;
	}	
	
	@OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name="id_proveedor")
	public List<OrdenCompra> getOrdenesCompra() {
		return ordenesCompra;
	}
	public void setOrdenesCompra(List<OrdenCompra> ordenes) {
		this.ordenesCompra= ordenes;
	}
	
	
	@OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name="idProveedor")
	public List<CondicionCompra> getCondicionesCompra() {
		return condicionesCompra;
	}
	public void setCondicionesCompra(List<CondicionCompra> condicionesCompra) {
		this.condicionesCompra = condicionesCompra;
	}
	
	@Transient
	public ProveedorVO getVO(){
		List<CondicionCompraVO> condCompraVO = new Vector<CondicionCompraVO>();
		for (CondicionCompra condicionCompra : condicionesCompra) {
			condCompraVO.add(condicionCompra.getVO());
		}
		ProveedorVO vo = new ProveedorVO(idProveedor, razonSocial, condCompraVO);
		return vo;
	}

	public void setVO(ProveedorVO vo){
		if (vo.getIdProveedor()!= null){
			this.setIdProveedor(vo.getIdProveedor());
		}
		this.setRazonSocial(vo.getRazonSocial());
		this.condicionesCompra = new Vector<CondicionCompra>();
		for (CondicionCompraVO condicionCompraVO : vo.getCondicionesCompra()) {
			CondicionCompra condicionCompra = new CondicionCompra();
			condicionCompra.setVO(condicionCompraVO);
			this.condicionesCompra.add(condicionCompra);
		}
	}
}
